# -*- coding: utf-8 -*-
# @Time        :2025/4/13 10:06
# @Author      :文刀水寿
# @File        : apis.py
"""
 @Description :
"""
from flask_restful import Resource, fields, marshal_with, reqparse
from flask import jsonify
from .models import *


# 类视图： VBC Class Based View
# 视图函数： FBV Function View
class HelloResouce(Resource):
    def get(self):
        return jsonify({'msg': 'get请求'})

    def post(self):
        return jsonify({'msg': 'post请求'})


#  -----------------------  字段格式化-----------------------#
# Flask-RESTful
# 字段格式化： 定义返回给前端的数据格式

ret_fields = {
    'status': fields.Integer,
    'msg': fields.String,
    'data': fields.String,
    'data2': fields.String(attribute='data'),  # 使用data的值
    'like': fields.String(default='ball')
}


class UserResource(Resource):
    # 加规则
    @marshal_with(ret_fields)
    def get(self):
        return {
            'status': 1,
            'msg': 'ok',
            'data': '刘涛'
        }


#  -----------------------  字段格式化-----------------------#

user_fields = {
    'id': fields.Integer,
    'name': fields.String,
    # 绝对路径
    'url': fields.Url(endpoint='id', absolute=True)
}
ret_fields2 = {
    'status': fields.Integer,
    'msg': fields.String,
    # 'data': fields.String,
    # 'data2': fields.String(attribute='data'),  # 使用data的值
    # 使用user对象
    'data': fields.Nested(user_fields)
}


class User2Resource(Resource):
    # 加规则
    @marshal_with(ret_fields2)
    def get(self):
        user = User.query.first()
        return {
            'status': 1,
            'msg': 'ok',
            'data': user
        }


#  -----------------------  字段格式化-----------------------#

user_fields2 = {
    'id': fields.Integer,
    'name': fields.String,
}

ret_fields3 = {
    'status': fields.Integer,
    'msg': fields.String,
    # 使用user对象
    'data': fields.List(fields.Nested(user_fields2))
}


class User3Resource(Resource):
    # 加规则
    @marshal_with(ret_fields3)
    def get(self):
        users = User.query.all()
        return {
            'status': 1,
            'msg': 'ok',
            'data': users
        }


#  -----------------------  参数解析-----------------------#
# 参数解析： 前端发送来的数据

parser = reqparse.RequestParser()
# 没有提交，则返回help
parser.add_argument('name', type=str, required=True, help='name是必须的参数')

class User4Resource(Resource):
    def get(self):
        # 获取参数
        args = parser.parse_args()
        name = args.get('name')
        return jsonify({'name': name})